﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Ninject;
using PGE.AfastamentosTempMVC.Modelo;
using PGE.AfastamentosTempMVC.Repositorio.Interfaces;

namespace PGE.AfastamentosTempMVC.Repositorio.Implementacao
{
    public class TipoAfastamentoRepositorio : ITipoAfastamentoRepositorio
    {
        private IUnitOfWork _UntWork;

        [Inject]
        public TipoAfastamentoRepositorio(IUnitOfWork UntWork)
        {
            _UntWork = UntWork;
        }

        #region ITipo_AfastamentoRepositorio Members

        public void Adicionar(TipoAfastamento tipo_Afastamento)
        {
            _UntWork.contexto.TipoAfastamentos.Add(tipo_Afastamento);
            _UntWork.Commit();
        }

        public void Editar(TipoAfastamento tipo_Afastamento)
        {
            _UntWork.contexto.Entry(tipo_Afastamento).State = System.Data.EntityState.Modified;
            _UntWork.Commit();

        }
        public void Deletar(TipoAfastamento tipo_Afastamento)
        {
            _UntWork.contexto.TipoAfastamentos.Remove(tipo_Afastamento);
            _UntWork.Commit();
        }

        public void DeletarMuitos(Func<TipoAfastamento, bool> where)
        {
            _UntWork.contexto.TipoAfastamentos.Where(where).ToList().ForEach(Tipo_Afastamento => _UntWork.contexto.TipoAfastamentos.Remove(Tipo_Afastamento));
            _UntWork.Commit();
        }

        public TipoAfastamento ObterPorID(int Id)
        {
            return _UntWork.contexto.TipoAfastamentos.Find(Id);
        }

        public TipoAfastamento ObterPornome(Func<TipoAfastamento, bool> where)
        {
            return _UntWork.contexto.TipoAfastamentos.Where(where).FirstOrDefault();
        }

        public TipoAfastamento ObterPrimeiro()
        {
            return _UntWork.contexto.TipoAfastamentos.FirstOrDefault();
        }

        public TipoAfastamento ObterPrimeiro(Func<TipoAfastamento, bool> where)
        {
            return _UntWork.contexto.TipoAfastamentos.Where(where).FirstOrDefault();
        }

        public IEnumerable<TipoAfastamento> ListarTudo()
        {
            return _UntWork.contexto.TipoAfastamentos.ToList();
        }

        public IQueryable<TipoAfastamento> GetQueryable()
        {
            return _UntWork.contexto.TipoAfastamentos;
        }

        public IEnumerable<TipoAfastamento> ListarMuitos(Func<TipoAfastamento, bool> where)
        {
            return _UntWork.contexto.TipoAfastamentos.Where(where).ToList();
        }

        #endregion
    }
}
